package ar.edu.isft189.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import ar.edu.isft189.model.Entidad;
import ar.edu.isft189.model.Usuario;
import ar.edu.isft189.utility.DBUtility;

public class GeneralCrudDao {
	private Connection connection;

	public GeneralCrudDao() {
		connection = DBUtility.getConnection();
	}

	/**
	 * Retorna todas las materias en formato para comboBox
	 * 
	 * @return List<Materia>
	 */
	public List<Entidad> getMateriasLabel() {
		List<Entidad> entidadList = new ArrayList<Entidad>();
		try {
			Statement statement = connection.createStatement();
			ResultSet rs = statement
					.executeQuery(" SELECT a.CODIGOM, a.DESCR FROM TBL_MATERIA a ");

			while (rs.next()) {
				Entidad e = new Entidad();

				e.setId(rs.getInt("codigoM"));
				e.setDesc(rs.getString("descr"));

				entidadList.add(e);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			System.out.println("Error en getMateriasLabel " + e.toString());
			e.printStackTrace();
		}

		return entidadList;
	}

	/**
	 * Retorna todos los docentes en formato para comboBox
	 * 
	 * @return List<Materia>
	 */
	public List<Entidad> getDocentesLabel() {
		List<Entidad> entidadList = new ArrayList<Entidad>();
		try {
			Statement statement = connection.createStatement();
			ResultSet rs = statement
					.executeQuery(" SELECT a.LEGAJO, a.APENOM FROM TBL_DOCENTE a ");

			while (rs.next()) {
				Entidad e = new Entidad();

				e.setId(rs.getInt("legajo"));
				e.setDesc(rs.getString("apeNom"));

				entidadList.add(e);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			System.out.println("Error en getDocentesLabel " + e.toString());
			e.printStackTrace();
		}

		return entidadList;
	}

	/**
	 * Metodo que devuelve el numero siguiente a la mesa de examen
	 * 
	 * @return Integer
	 */
	public Integer getMaxIdm() {

		Integer idm = 1;
		ResultSet rs = null;
		try {
			Statement statement = connection.createStatement();
			rs = statement.executeQuery(" SELECT MAX(IDM)+1 FROM TBL_MESAEX ");

			while (rs.next()) {
				idm = rs.getInt(1);
			}

			if (!rs.isClosed())
				rs.close();

		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			System.out.println("Error en getMaxMesaExamen " + e.toString());
			e.printStackTrace();
		}

		return idm;
	}

	/**
	 * Verifica un usuario en la base de datos y si existe lo devulve
	 * con el perfil que corresponde... sino devuelve null
	 * 
	 * @param usr
	 * @param psw
	 * @return
	 */
	public Usuario login(String usr, String psw) {

		Usuario u = new Usuario();
		ResultSet rs = null;
		try {
			PreparedStatement ps = connection
					.prepareStatement(" SELECT LEGAJO, APENOM, PERFIL FROM TBL_DOCENTE WHERE LEGAJO = ? AND NRODOC = ? ");

			ps.setInt(1, Integer.parseInt(usr));
			ps.setInt(2, Integer.parseInt(psw));
			rs = ps.executeQuery();

			if (rs.next()) {
				u.setLegajo(rs.getLong("LEGAJO"));
				u.setApenom(rs.getString("APENOM"));
				u.setPerfil(rs.getInt("PERFIL"));
				
				return u;				
			} else{
				u.setLegajo(0L);
				u.setApenom("");
				u.setPerfil(0);
				
				return u;
			}							

		} catch (SQLException sqle) {
			System.out.println("Error en login " + sqle.toString());
			sqle.printStackTrace();
			return null;
		} catch (Exception e) {
			System.out.println("Error en login " + e.toString());
			e.printStackTrace();
			return null;
		}
	}

}
